#ifndef GRAPHPROJECT_QUEUE_H
#define GRAPHPROJECT_QUEUE_H

#include "stdio.h"
#include <stdlib.h>
#include <stdbool.h>

#define MaxSize 50 // 定义队列中元素的最大个数
typedef int ElemType;

/**  * 队列的顺序存储类型  */
typedef struct {
    ElemType data[MaxSize];
    // 存放队列元素
    int front,rear;  // 队头指针和队尾指针
}SqQueue;

/**
 * 初始化队列
 * 初始时：头指针和尾指针指向同一个区域
 * @param Q
 */
void InitQueue(SqQueue *Q){
    Q->rear = Q->front;
}

/**
 * 判断队列是否为空
 * @param Q
 * @return
 */
bool isEmpty(SqQueue Q){
    if (Q.rear==Q.front) return true;
    else return false;
}

/**
 * 入队操作
 * @param Q
 * @param x
 * @return
 */
bool EnQueue(SqQueue *Q,ElemType x){
    if((Q->rear+1)%MaxSize==Q->front) return false; //队列满则报错
    Q->data[Q->rear] = x;
    Q->rear = (Q->rear+1)%MaxSize;  // 队尾指针加1取模
    return true;
}

/**
 * 出队操作
 * @param Q
 * @param x
 * @return
 */
bool DeQueue(SqQueue *Q,int *x){
    if(Q->rear==Q->front) return false; //队空的时候报错
    // 加上(ElemType *)强制转换，防止出现：assignment makes pointer from integer without a cast
    *x = Q->data[Q->front];
    Q->front = (Q->front+1)%MaxSize;
    return true;
}

#endif //GRAPHPROJECT_QUEUE_H
